package es.ise.core.mbg.plugins;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.internal.util.JavaBeansUtil;

import es.ise.core.mbg.plugins.utils.TableUtilities;

/**
 * Este plugin realiza un cambio de nombre en todas las columnas, elimando
 * el prefijo en todas ellas si la tabla tiene definido un prefijo propio.
 * 
 * @author Paco
 */
public class AutoRenamePlugin extends PluginAdapter
{
	/**
	 * {@inheritDoc}
	 * 
	 * @return siempre devuelve <code>true</code> porque no hay comprobaciones que hacer
	 */
	@Override
	public boolean validate(List<String> warnings)
	{
		// no validations needed
		return true;
	}

	@Override
	public void initialized(IntrospectedTable table)
	{
		String prefix = TableUtilities.getTablePrefix(table);
		
		if(prefix != null) //if renaming is possible
		{
			final Pattern search = Pattern.compile(String.format("^%s_", prefix));
			for(IntrospectedColumn column: table.getAllColumns())
			{
				// se utiliza la propiedad "renamed" para evitar que una columna a la
				// que por configuración ya se le ha cambiado el nombre se le vuelva
				// a cambiar, ya que este plugin cambia el nombre después de cuando
				// lo hace la configuración
				if(!column.getProperties().containsKey("renamed"))
				{
					Matcher matcher = search.matcher(column.getActualColumnName());
					column.setJavaProperty(JavaBeansUtil.getCamelCaseString(matcher.replaceAll(""), false));
				}
			}
		}
	}

	

}
